package com.zrh.jsd.service.studydemo.enable_schedule_test;

import com.zrh.jsd.api.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

//通过配置类注解@EnableScheduling来开启对定时任务的支持,也可以放到启动类中
@Component
@EnableScheduling
@Slf4j
public class ScheduleTest {

    @Autowired
    UserService userServiceImpl;

//    1、fixedDelay和fixedRate，单位是毫秒；
//    区别：fixedRate---,每多少毫秒执行一次，与具体业务执行时间没关系；而fixedDelay是当任务执行完毕后按照设定的毫秒值执行任务。所以根据实际业务不同，我们会选择不同的方式。
//            2、cron表达式：依据业务需求，可设定具体的任务执行时间，预定时间一到就会自动执行；
//    cron一共有7位，但是最后一位是年，可以留空，一般情况可以写6位：
//            * 第一位，表示秒，取值0-59
//            * 第二位，表示分，取值0-59
//            * 第三位，表示小时，取值0-23
//            * 第四位，日期天/日，取值1-31
//            * 第五位，日期月份，取值1-12
//            * 第六位，星期，取值1-7，星期一，星期二...，注：不是第1周，第二周的意思
//    另外：1表示星期天，2表示星期一。
//            * 第7为，年份，可以留空，取值1970-2099
//            3、cron中，还有一些特殊的符号，含义如下：
//            (*)星号：可以理解为每的意思，每秒，每分，每天，每月，每年...
//            (?)问号：问号只能出现在日期和星期这两个位置。
//            (-)减号：表达一个范围，如在小时字段中使用“10-12”，则表示从10到12点，即10,11,12
//            (,)逗号：表达一个列表值，如在星期字段中使用“1,2,4”，则表示星期一，星期二，星期四
//            (/)斜杠：如：x/y，x是开始值，y是步长，比如在第一位（秒） 0/15就是，从0秒开始，每15秒，最后就是0，15，30，45，60    另：*/y，等同于0/y
// 4、举例描述cron:
//            0 0 8 * * ?     每天8点执行
//   0 30 8 * * ?    每天8点30分执行
//   0 30 5 ? * *    每天8点30分执行，与上面作用相同，区别特殊符号
//   0 5/5 8 * * ?   每天8点的 5分，10分，15分，20分，35分，40分，45分，50分，55分这几个时间点执行
//   0 30 8 ? * 1    每周星期天，8点30分 执行，注：1表示星期天
//   0 30 8 ? * 1#3  每个月的第三个星期，星期天执行，#号只能出现在星期的位置


    @Scheduled(fixedRate = 100000)
    public void testSchedule(){
        log.info(String.valueOf(new Date()));
        System.out.println(userServiceImpl.getUserName(123L));
    }

}
